package com.zt.service;

import com.zt.entity.UserCoupons;
import com.zt.vo.CouponDistributionStatsVO;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 优惠券发放缓存服务接口
 */
public interface CouponDistributionCacheService {
    
    /**
     * 缓存用户优惠券信息
     * @param userCoupon 用户优惠券信息
     */
    void cacheUserCoupon(UserCoupons userCoupon);
    
    /**
     * 批量缓存用户优惠券信息
     * @param userCoupons 用户优惠券列表
     */
    void batchCacheUserCoupons(List<UserCoupons> userCoupons);
    
    /**
     * 获取用户拥有的优惠券ID集合
     * @param userId 用户ID
     * @return 优惠券ID集合
     */
    Set<Integer> getUserCouponIds(Integer userId);
    
    /**
     * 检查用户是否拥有指定优惠券（从缓存）
     * @param userId 用户ID
     * @param couponId 优惠券ID
     * @return 是否拥有
     */
    Boolean hasUserCouponFromCache(Integer userId, Integer couponId);
    
    /**
     * 缓存优惠券发放统计信息
     * @param couponId 优惠券ID
     * @param stats 统计信息
     */
    void cacheCouponDistributionStats(Integer couponId, CouponDistributionStatsVO stats);
    
    /**
     * 获取优惠券发放统计信息（从缓存）
     * @param couponId 优惠券ID
     * @return 统计信息
     */
    CouponDistributionStatsVO getCouponDistributionStatsFromCache(Integer couponId);
    
    /**
     * 增加优惠券发放数量
     * @param couponId 优惠券ID
     * @param count 增加数量
     */
    void incrementCouponDistributedCount(Integer couponId, Integer count);
    
    /**
     * 获取优惠券已发放数量（从缓存）
     * @param couponId 优惠券ID
     * @return 已发放数量
     */
    Integer getCouponDistributedCountFromCache(Integer couponId);
    
    /**
     * 删除用户优惠券缓存
     * @param userId 用户ID
     */
    void deleteUserCouponCache(Integer userId);
    
    /**
     * 删除优惠券发放统计缓存
     * @param couponId 优惠券ID
     */
    void deleteCouponDistributionStatsCache(Integer couponId);
    
    /**
     * 缓存优惠券发放记录
     * @param couponId 优惠券ID
     * @param userId 用户ID
     * @param userCoupon 用户优惠券信息
     */
    void cacheDistributionRecord(Integer couponId, Integer userId, UserCoupons userCoupon);
    
    /**
     * 获取优惠券的所有发放记录（从缓存）
     * @param couponId 优惠券ID
     * @return 发放记录列表
     */
    List<UserCoupons> getCouponDistributionRecords(Integer couponId);

    /**
     * 缓存用户的优惠券详细信息（按您指定的格式）
     * @param userId 用户ID
     * @param coupons 用户的优惠券列表
     * @param expireDays 过期天数
     */
    void cacheUserCouponsDetail(Integer userId, List<Map<String, Object>> coupons, Integer expireDays);

    /**
     * 获取用户的优惠券详细信息（从缓存）
     * @param userId 用户ID
     * @return 用户的优惠券详细信息列表
     */
    List<Map<String, Object>> getUserCouponsDetail(Integer userId);

    /**
     * 添加单个优惠券到用户的优惠券详细信息缓存中
     * @param userId 用户ID
     * @param couponDetail 优惠券详细信息
     * @param expireDays 过期天数
     */
    void addCouponToUserDetail(Integer userId, Map<String, Object> couponDetail, Integer expireDays);
}
